package com.dongzili.demo.common.config.redis;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
public class RedisConfig {

    /**
     * redis配置
     */
    @Bean
    public <T> RedisTemplate<String, T> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        return RedisTemplateConfig.getRedisTemplate();
    }





//    @Bean
//    public <T> RedisTemplate<String, T> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//        // 实例化redisTemplate
//        RedisTemplate<String, T> redisTemplate = new RedisTemplate<>();
//        //设置连接工厂
//        redisTemplate.setConnectionFactory(redisConnectionFactory);
//        // key采用String的序列化
//        redisTemplate.setKeySerializer(keySerializer());
//        // value采用jackson序列化
//        redisTemplate.setValueSerializer(valueSerializer());
//        // Hash key采用String的序列化
//        redisTemplate.setHashKeySerializer(keySerializer());
//        // Hash value采用jackson序列化
//        redisTemplate.setHashValueSerializer(valueSerializer());
//        // 支持事务
//        // redisTemplate.setEnableTransactionSupport(true);
//        //执行函数，初始化RedisTemplate
//        redisTemplate.afterPropertiesSet();
//        return redisTemplate;
//    }
//
//    /**
//     * key类型采用String序列化
//     *
//     * @return
//     */
//    private RedisSerializer<String> keySerializer() {
//        return new StringRedisSerializer();
//    }
//
//    /**
//     * value采用JSON序列化
//     *
//     * @return
//     */
//    private RedisSerializer<Object> valueSerializer() {
//        //设置jackson序列化
//        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
//        //设置序列化对象
//        jackson2JsonRedisSerializer.setObjectMapper(getMapper());
//        return jackson2JsonRedisSerializer;
//    }
//
//    /**
//     * 使用com.fasterxml.jackson.databind.ObjectMapper
//     * 对数据进行处理包括java8里的时间
//     *
//     * @return
//     */
//    private ObjectMapper getMapper() {
//        ObjectMapper mapper = new ObjectMapper();
//        //设置可见性
//        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        //默认键入对象
////        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
//        //设置Java 8 时间序列化
//        JavaTimeModule timeModule = new JavaTimeModule();
//        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//        timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
//        timeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
//        timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//        timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
//        timeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
//        //禁用把时间转为时间戳
//        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//        mapper.registerModule(timeModule);
//        return mapper;
//    }


}